package com.gitee.qdbp.general.trade.api.order.main.model;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import com.gitee.qdbp.able.jdbc.paging.PartList;

public class OrderItemBase implements Serializable {

    /** 版本序列号 **/
    private static final long serialVersionUID = 1L;

    /** 商品唯一ID **/
    private String goodsUid;

    /** 商品版本ID **/
    private String goodsVid;

    /** 单品ID **/
    private String skuId;

    /** 品牌ID **/
    private String brandCode;

    /** 型号 **/
    private String modelNumber;

    /** 商品分类编号 **/
    private String categoryCode;

    /** 商品名称 **/
    private String goodsName;

    /** 商品标题 **/
    private String goodsTitle;

    /** 商品单位(个/件/台/袋等) **/
    private String goodsUnit;

    /** 商品价格 **/
    private Double goodsPrice;

    /** 购买数量 **/
    private Integer quantity;

    /** 折扣金额 **/
    private Double discountAmount;

    /** 商品金额=商品价格*数量-折扣 **/
    private Double goodsAmount;

    /** 规格描述: 如颜色:红/尺码:M; 颜色:红/尺码:L; ... **/
    private String specificText;

    /** 预览图片 **/
    private String previewImage;

    /** 获取商品唯一ID **/
    public String getGoodsUid() {
        return goodsUid;
    }

    /** 设置商品唯一ID **/
    public void setGoodsUid(String goodsUid) {
        this.goodsUid = goodsUid;
    }

    /** 获取商品版本ID **/
    public String getGoodsVid() {
        return goodsVid;
    }

    /** 设置商品版本ID **/
    public void setGoodsVid(String goodsVid) {
        this.goodsVid = goodsVid;
    }

    /** 获取单品ID **/
    public String getSkuId() {
        return skuId;
    }

    /** 设置单品ID **/
    public void setSkuId(String skuId) {
        this.skuId = skuId;
    }

    /** 获取品牌ID **/
    public String getBrandCode() {
        return brandCode;
    }

    /** 设置品牌ID **/
    public void setBrandCode(String brandCode) {
        this.brandCode = brandCode;
    }

    /** 获取型号 **/
    public String getModelNumber() {
        return modelNumber;
    }

    /** 设置型号 **/
    public void setModelNumber(String modelNumber) {
        this.modelNumber = modelNumber;
    }

    /** 获取商品分类编号 **/
    public String getCategoryCode() {
        return categoryCode;
    }

    /** 设置商品分类编号 **/
    public void setCategoryCode(String categoryCode) {
        this.categoryCode = categoryCode;
    }

    /** 获取商品名称 **/
    public String getGoodsName() {
        return goodsName;
    }

    /** 设置商品名称 **/
    public void setGoodsName(String goodsName) {
        this.goodsName = goodsName;
    }

    /** 获取商品标题 **/
    public String getGoodsTitle() {
        return goodsTitle;
    }

    /** 设置商品标题 **/
    public void setGoodsTitle(String goodsTitle) {
        this.goodsTitle = goodsTitle;
    }

    /** 获取商品单位(个/件/台/袋等) **/
    public String getGoodsUnit() {
        return goodsUnit;
    }

    /** 设置商品单位(个/件/台/袋等) **/
    public void setGoodsUnit(String goodsUnit) {
        this.goodsUnit = goodsUnit;
    }

    /** 获取商品价格 **/
    public Double getGoodsPrice() {
        return goodsPrice;
    }

    /** 设置商品价格 **/
    public void setGoodsPrice(Double goodsPrice) {
        this.goodsPrice = goodsPrice;
    }

    /** 获取购买数量 **/
    public Integer getQuantity() {
        return quantity;
    }

    /** 设置购买数量 **/
    public void setQuantity(Integer quantity) {
        this.quantity = quantity;
    }

    /** 获取折扣金额 **/
    public Double getDiscountAmount() {
        return discountAmount;
    }

    /** 设置折扣金额 **/
    public void setDiscountAmount(Double discountAmount) {
        this.discountAmount = discountAmount;
    }

    /** 获取商品金额=商品价格*数量-折扣 **/
    public Double getGoodsAmount() {
        return goodsAmount;
    }

    /** 设置商品金额=商品价格*数量-折扣 **/
    public void setGoodsAmount(Double goodsAmount) {
        this.goodsAmount = goodsAmount;
    }

    /** 获取规格描述: 如颜色:红/尺码:M; 颜色:红/尺码:L; ... **/
    public String getSpecificText() {
        return specificText;
    }

    /** 设置规格描述: 如颜色:红/尺码:M; 颜色:红/尺码:L; ... **/
    public void setSpecificText(String specificText) {
        this.specificText = specificText;
    }

    /** 获取预览图片 **/
    public String getPreviewImage() {
        return previewImage;
    }

    /** 设置预览图片 **/
    public void setPreviewImage(String previewImage) {
        this.previewImage = previewImage;
    }

    /**
     * 将当前对象转换为子类对象
     *
     * @param clazz 目标类型
     * @return 目标对象
     */
    public <T extends OrderItemBase> T to(Class<T> clazz) {
        T instance;
        try {
            instance = clazz.newInstance();
        } catch (Exception e) {
            throw new IllegalArgumentException("Failed to create " + clazz.getSimpleName() + " instance.", e);
        }

        instance.setGoodsUid(this.getGoodsUid()); // 商品唯一ID
        instance.setGoodsVid(this.getGoodsVid()); // 商品版本ID
        instance.setSkuId(this.getSkuId()); // 单品ID
        instance.setBrandCode(this.getBrandCode()); // 品牌ID
        instance.setModelNumber(this.getModelNumber()); // 型号
        instance.setCategoryCode(this.getCategoryCode()); // 商品分类编号
        instance.setGoodsName(this.getGoodsName()); // 商品名称
        instance.setGoodsTitle(this.getGoodsTitle()); // 商品标题
        instance.setGoodsUnit(this.getGoodsUnit()); // 商品单位(个/件/台/袋等)
        instance.setGoodsPrice(this.getGoodsPrice()); // 商品价格
        instance.setQuantity(this.getQuantity()); // 购买数量
        instance.setDiscountAmount(this.getDiscountAmount()); // 折扣金额
        instance.setGoodsAmount(this.getGoodsAmount()); // 商品金额=商品价格*数量-折扣
        instance.setSpecificText(this.getSpecificText()); // 规格描述
        instance.setPreviewImage(this.getPreviewImage()); // 预览图片
        return instance;
    }

    /**
     * 将OrderItemBean转换为子类对象
     *
     * @param beans 待转换的对象列表
     * @param clazz 目标类型
     * @param <T> OrderItemBase或子类
     * @param <C> T的子类
     * @return 目标对象列表
     */
    public static <T extends OrderItemBase, C extends T> List<C> to(List<T> beans, Class<C> clazz) {
        if (beans == null) {
            return null;
        }
        List<C> list;
        if (beans instanceof PartList) {
            PartList<C> partlist = new PartList<>();
            partlist.setTotal(((PartList<?>) beans).getTotal());
            list = partlist;
        } else {
            list = new ArrayList<>();
        }
        for (OrderItemBase bean : beans) {
            list.add(bean.to(clazz));
        }
        return list;
    }

}
